package com.kfyty.loveqq.javafx.example.controller;

import com.kfyty.loveqq.framework.core.lang.Value;
import com.kfyty.loveqq.framework.javafx.core.AbstractController;
import com.kfyty.loveqq.framework.javafx.core.annotation.FController;
import com.kfyty.loveqq.framework.javafx.core.annotation.FPrototypeScope;
import com.kfyty.loveqq.framework.javafx.core.annotation.FView;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import lombok.extern.slf4j.Slf4j;

/**
 * {@link FController} 标识是一个 fxml 控制器，并且是一个单例控制器
 * <p>
 * 添加 {@link FPrototypeScope} 注解可标识一个原型作用域，每次新开窗口都创建新的窗口
 */
@Slf4j
@FPrototypeScope
@FController(value = "root", path = "/fxml/hello.fxml", title = "hello", main = true)
public class HelloController extends AbstractController<FlowPane> {
    /**
     * 文本框的 {@link TextField#text} 绑定到 name 字段
     * 基础数据类型需要用 {@link Value} 包装
     */
    @FXML
    @FView("text:name.value")
    private TextField nameText;

    /**
     * 要绑定的模型
     */
    private Value<String> name;

    /**
     * 直接从模型中获取视图数据
     */
    @FXML
    protected void showData() {
        log.info("name: {}", this.name.get());
    }

    /**
     * 直接操作模型更新视图
     */
    @FXML
    protected void resetData() {
        this.name.set("");
    }
}
